在這個系列的最後一個章節,我們來談談 Quality Assurance 在 DevOps 中的角色,測試的手段有很多,但是最終的目標都是高品質的交付,因此在前面的章節我們主要介紹,該如何建立 Web, App 的 UI 自動化測試,並且將其導入 CI/CD 流程中,同時結合 BrowserStack 這類型的工具來提升我們的測試效率,建構起測試後便可以讓這些測試作為我們的品質關卡,在開發流程中持續測試、持續守護產品的品質,接下來這章不談技術,我們將一起探討 QA 在 DevOps 流程中的角色,以及 QA 如何與 DevOps 工程師緊密合作。
隨著軟體開發流程不斷演進,DevOps 已成為現代軟體交付的重要方法論之一。DevOps 藉由將開發(Development)與運維(Operations)緊密結合,實現快速、持續的軟體開發和交付。而在這個流程中,品質保證 (QA) 扮演了關鍵的角色,確保軟體產品在整個開發周期中不僅能快速交付,還能保持高品質和穩定性。
在過去 QA 的角色比較偏向手動點擊操作的測試人員 (Tester) 而非 品質保證 (Quality Assurance),在 Tester 時期,測試工程師往往都是在產品交付前的最後一關,作為品質的把關者,但在現代軟體開發中,隨著系統的複雜性不斷提高,確保產品質變得愈加困難,DevOps、敏捷的概念盛行後,若是測試還停留在純點擊操作的階段,容易造成產品的迭代都卡在測試的情況發生,因此在當今天測試領域,測試工程師除了做到品質的把關者外,還需要具備測試品質賦能的思維,與 PM, DevOps, RD 協作,分析如何通過在開發生命周期的每個階段都注重品質來實現高效、穩定的產品交付。
QA 在傳統軟體開發中,通常是專案或是 sprint 後期的獨立環節,負責檢查軟體是否符合要求或是存在缺陷。然而在 DevOps 流程中,QA 的角色和責任向全流程推進,成為軟體開發全生命周期的核心組成部分。這種轉變大大提升了軟體的整體品質,並減少了發現錯誤和修正的成本。
一個老生常談的議題了,當今天缺陷發現的越早,其修復成本越低,透過「測試左移」(Shift-left)提早介入開發過程,並持續進行測試。QA 需要參與需求分析、設計和開發階段,協助定義驗收標準和測試案例,並在評審時檢視專案合理性,從一開始就把控產品品質,賦能品質思維。這樣可以避免後期發現重大缺陷,縮短修正的時間,並降低重工的風險並加速交付。
相較於 DevOps 及 SRE 關注的 infrastructure,QA 也會持續關注產品在上線後的表現,像是某個新功能發佈後,用戶的反饋是否是預期的,以及監控其在正式環境上的性能和穩定性,同時 QA 應該收集用戶反饋數據,分析新功能的實際效果,並將這些數據帶入後續的開發迭代中。這樣可以持續優化產品品質,並根據用戶需求進行調整,確保產品能夠滿足市場需求。
隨著敏捷及 DevOps 持續交付的概念落實到許多團隊,軟體迭代的速度相較過去有顯著的提升,這時候只有手動測試已經無法滿足複雜專案的回歸測試需求,因此測試人員需要掌握自動化測試的技術能力,並且與 DevOps 合作,QA 負責設計自動化測試框架,並確保測試能夠無縫整合到整個交付管道中。自動化測試涵蓋單元測試、功能測試、回歸測試和性能測試,並且建立品質卡點,當測試失敗時則拒絕 merge 或是拒絕交付等機制,防止任何新的變更破壞現有功能,同時確保測試不會成為開發流程中的瓶頸。
身為 QA 需要是團隊中對於產品功能細節最了解,因為我們貫穿在每個流程裡,並且需要知道功能的細節才能夠規劃測試,因此 QA 需要與開發、運維、產品管理等團隊緊密合作,QA 需要與各團隊夥伴積極溝通,主動分享測試結果、報告錯誤並協助解決問題,確保問題能迅速反饋並降低對交付的影響。
在 DevOps 團隊中,QA 不僅僅是問題的發現者
,同時 QA 也是問題解決者
肯定不是解決提出問題的人。以下是 QA 在 DevOps 中能夠提供的具體協助:
通過前面幾章的介紹,我們已經具備構建自動化測試框架的能力,這時候我們便可以與 DevOps 合作,將測試整入產品的 CI/CD 流程中,讓每次程式碼提交或是部署時,動化測試可以快速驗證軟體功能的完整性和穩定性,確保新功能不會破壞現有系統。
除此之外,QA 也能夠協助開發流程中環境的規劃,像是 dev 環境、stg 環境 、uat 環境或 prd 環境,透過 QA 協助規範每個環境能夠運用的規範以及交付的標準,讓我們在開發流程中能夠擁有更順暢的體驗。
在整個開發過程中,QA 負責評估和識別風險,最重要的是與相關的利害關係人揭露風險,QA 需要與 DevOps 合作,找出軟體或是 infrastructure 的弱點,並通過測試來驗證這些潛在的風險,在影響擴大前協助追蹤問題及解決。
我想有關交付風險的防範在此時 2024 年最好的範例應該就是 crowdstrike 造成大當機帶來的衝擊,在這次事件後的報告中我們也看到了除了需要做更多的測試之外,透過金絲雀部署來試探是否有淺在的風險發生也是確保品質很重要的一環。
在 DevOps 流程中,測試策略必須靈活且具有適應性。QA 應該制定清晰的測試策略,涵蓋手動和自動測試、回歸測試及性能測試等,並確保這些測試能夠與持續交付節奏相配合。
除了測試,QA 還可以協助設計和實現監控系統。這些系統能夠即時捕捉運行時的異常,並通過警報機制通知相關人員,同時通過故障演練來模擬當今天產品發生線上問題時的行為,透過故障演練的結果持續優化產品以及建立起人員在故障發生時的處理能力,進而縮短問題響應時間。
QA 和 DevOps 工程師必須緊密合作,確保軟體開發流程能夠順利進行。以下是一些有效的合作模式:
QA 和 DevOps 工程師可以共同制定品質交付標準和準則,確保測試環境能夠反映實際生產環境,並且測試結果具備高可信度。這樣可以避免測試環境與線上環境不一致,導致問題無法及時發現。
QA 和 DevOps 工程師需要共同確保與測試相關的工具整合,不管是單元測試或是整合測試,該如何串接或是根據測試金字塔設置卡點,都仰賴於雙方的合作,同時像是 sentry 這類型的第三方工具整合,或是線上發生緊急問題時該如何透過測試快速定位問題,這些工具的串接是雙方共同合作努力的內容。
QA 需要時刻關注測試狀態及線上狀況,例如當今天測試因為 github actions self-host 數量不夠導致測試出現排隊的情況時,便可以與 DevOps 合作增加機器,或是在微服務測試需要動態部署 service 版本時,也仰賴雙方之間的協作,除此之外還有許許多多的例子,因此身為 QA 除了測試之外還需要具備良好的溝通技巧,才能夠在誇團隊的協作中,高效的表達合作的需求。
在 DevOps 中,品質保證不再是開發後期的附加環節,而是整個流程中的核心組成部分。透過早期介入、持續測試和風險評估,QA 能夠幫助軟體開發團隊快速發現並解決問題,確保產品能夠穩定、高效的交付。此外,通過與 DevOps 工程師的緊密合作,QA 可以確保自動化測試、監控和警報系統的順利運行,進而提升整體系統的品質和可靠性。這樣的合作模式,不僅能夠縮短開發周期,還能降低風險,並確保產品品質是是具備讓使用者滿意的產品。
首先先感謝各位對於文章的支持,這是我第一次參加鐵人挑戰賽,希望能夠將過去的一些經驗有系統性的分享出來,讓想要接觸自動化測試的夥伴們能夠從 0 到 1 建立起自動化的雛形,在這 30 篇文章中,為了維持一篇一個知識點並且避免文章太長導致消化不良,所以蠻多地方都只挑重點來分享,謝謝大家的體諒,希望這系列的文章能夠幫助到大家在建立自動化測試時能夠有更多的思路,讓我們一起為更好的品質努力!